package com.cn.bulu.dao;

import com.cn.bulu.pojo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

@Transactional
public interface CustomerDao {
	// 通过手机号查询用户是否存在
	int getCustomerNumber(String phone);

	// 增加customer
	int insertCustomer(Map<Object, Object> map);

	// 根据id查询顾客信息
	Customer selectMessage(Map<String, Object> params);

	// 判断顾客账号是否停用
	Integer selectDisable(String phone);

	// 判断经销商子账号是否停用
	Integer selectChildDisable(Integer phone);

	// 查询顾客是否存在
	int selectCustomer(Map<Object, Object> map);

	// 通过手机号密码得到顾客id
	int getCustomerId(Map<Object, Object> map);

	// 登录成功后查询收藏ID
	List<Integer> selectCollectionDL(Integer customerId);

	// 修改密码
	void updatePassword(Map<String, Object> map);

	// 选择经销子账号
	int selectCustomerOfDealer(Map<Object, Object> map);

	// 安装房间位置获取
	List<Location> getLocation();

	// 根据安装位置Id查询内容
	String selectLocation(Integer locationId);

	// 加入收藏
	int addCollect(Map<String, Object> map);

	// 查询收藏表中的sampleId
	Integer[] selectSampleId(Integer customerId);

	// 根据单个sampleId查询产品
	Sample selectOneSample(Integer sampleId);

	// 删除单个收藏的产品
	int deleteCollection(Map<String, Object> map);

	// 数据存入购物车
	int insertCar(Goods goods);

	// 展示购物车
	List<Map<String, Object>> getCar(Integer customerId);

	// 展示购物车配件
	List<Map<String, Object>> getCar2(Integer customerId);

	// 通过产品id得到该产品的信息
	Sample getSampleById(Integer sampleId);

	// 获取locationbyId
	String getLocationById(Integer locationId);

	// 删除购物车中的商品
	void deleteGoodOfCar(Integer carId);

	// 所有收货地址
	List<Customer_address> getAllAddress(int customerId);

	// 添加新的收货地址
	void insertNewAddress(Customer_address customer_address);

	// 通过地址id获取所有地址
	Customer_address getAddressById(Integer cuAdId);

	// 对配件生成新的订单
	void insertOrderOfNoIndent(Orders orders);

	// 根据顾客id,地址id修改是否为默认
	void updateDefaultAddressStatus(Integer customerId);

	// 把地址设为默认
	void updateAddressStatus(Integer cuAdId);

	// 把购物车修改成商品
	void updateCarToGoodsOfAcc(Map<String, Object> map);

	// 不全是配件的商品生成indent
	void insertIndent(Indent indent);

	// 不全是配件的商品
	void updateCarToIndent(Integer goodsId);

	// 插入goods_indent
	void insertGood_Indent(Map<String, Object> map3);

	// 修改顾客头像
	void updateHeadImg(Map<String, Object> map);

	// 展示所有购物卷
	List<Customer_coupons> getCouponsId(int customerId);

	// 得到该优惠卷的所有详细信息
	Coupons getCouponsDeatil(Integer couponsId);

	// 得到该优惠卷的所有详细信息
	Map<String, Object> getCouponsDeatil2(Integer couponsId);

	// 更改优惠卷状态
	void updateCouponsStatus(Map<String, Object> map);

	// 得到app所有的信息
	App getAppMessage();

	// 得到所有软件指导的图,按顺序排
	List<String> getGuide(Integer appId);

	// 得到未完成订单
	List<Indent> getGoingIndent(Integer customerId);

	// 根据订单id得到所有的商品id
	List<Integer> getGoodIdByIndentId(Integer indentId);

	// 通过goodsId获取sampleId和图片
	Sample getSampleByGoodId(Integer goodsId);

	// 通过goodsId获取sampleId和图片
	Map<String, Object> getSampleByGoodId2(Integer goodsId);

	// 通过indentid得到所有商品的信息
	List<Goods> getGoodByIndentId(List<Integer> indentId);

	// 取消运行中的订单
	void updateIndentByIndentId(Map<String, Object> map);

	// 得到所有已取消的订单
	List<Indent> getCancleIndent(int customerId);

	// 得到未付款的视为已取消的订单
	List<Map<String, Object>> selectStatus6(Integer customerId);

	// 修改商品
	void updateGoodByGoodId(Map<String, Object> map);

	// 插入商品的配件
	void insertAccOfGoods(Goods goods);

	// 插入goods_acc表
	void insertGoods_Acc(Map<String, Object> map);

	// 通过商品id得到他的所有配件关系表
	List<Map<String, Object>> getGoods_AccByGoodsId(int goodsId);

	// 通过商品id得到他的所有配件关系表
	List<Map<String, Object>> getGoods_AccByGoodsId2(int goodsId);

	// 根据商品ID查询样品图
	Map<String, Object> selectSampleImg(Integer goodsId);

	// 查询已完成Orders
//	List<Map<String, Object>> selectOrderId(Integer customerId);

	// 修改商品绑定的配件
	int updateGoods_Acc(Map<String, Object> map);
	
	// 修改商品属性
	int updateGoods(Map<String, Object> map);

	// 查询已完成和已退款Orders
	List<Orders> selectOrderId2(Integer customerId);

	// 根据orderId查询indent安装是否完成
	Integer selectCount(Integer orderId);

	// 根据orderId查询对应的商品个数
	Integer selectGoodsSL(Integer orderId);

	// 根据orderId查询对应已评价的商品个数
	Integer selectGoodsYE(Integer orderId);

	// 根据地址ID查询地址
	Customer_address selectAddress(Integer cuAdId);

	// 根据订单ID查询其中含有的商品图片
	List<Map<String, Object>> selectGoodsImg(Integer orderId);

	// 根据订单ID查询订单中的商品
	List<Map<String, Object>> selectGoodsOR(Integer orderId);

	// 查询订单对应的测量工人
	Map<String, Object> selectCWorker(Integer orderId);

	// 查询订单对应的测量工人
	Map<String, Object> selectAWorker(Integer orderId);

	// 查询对工人评价的内容
	Integer selectStar(Integer indentId);

	// 评价完成修改商品评价状态
	int updateGoodsEva(Integer goodsId);

	// 查询已收货未评价商品
	List<Goods> selectIsEvaluation(Integer orderId);

	// 根据商品id删除该商品
	void deleteGoodOfGoodId(Integer accId);

	// 删除该商品和配件的关系表
	void deleteGoods_accByGoodIdAndAccId(Goods_accses goods_accses);

	// 得到所有已付款的订单
	List<Map<String, Object>> getOrderOfAlreadyPay(Integer integer);

	// 通过商品id得到所有商品图片
	List<Map<String, Object>> getSampleByGoodsIds(List<Integer> goodsIds);

	// 通过订单id得到所有商品图片getParsGoodsIdsByGoodsId
	List<Integer> getGoodsIdsByIndentId(Integer indentId);

	// 通过订单id得到所有商品图片
	List<Map<String, Object>> getParsGoodsIdsByGoodsId(Integer goodsId);
	
	// 通过订单id得到所有商品的详细信息
	List<Map<String, Object>> getSampleDetailByOrderId(Integer indentId);

	// 通过订单id得到所有配件的详细信息
	List<Map<String, Object>> getSampleDetailByOrderId2(Integer orderId);

	// 根据订单的状态得到是否被审核
	int getIsAuditingByOrderId(Integer orderId);

	// 去掉订单
	void updateStatusOfOrders(Map<String, Object> map);

	// indent生成orders
	void indentToOrders(Orders orders);

	// 根据商品id给这个商品生成orders
	void updateGoodByIdAddOrder(Map<String, Object> map);

	// 点击待安装
	List<Map<String, Object>> getNoInstallIndent(Map<String, Object> map);

	// 根据用户id,订单号,订单状态,修改订单状态
	void updateOrderStatus(Map<String, Object> map);

	// 根据订单号得到所有的商品
	List<Map<String, Object>> getGoodsByOrderId(Integer orderId);

	void insertIndentOfInsatll2(Indent indent);

	// 修改预约时间
	void updateIndentOfInstall(Indent indent);

	// 通过indentid得到该样品的详细信息
	List<Map<String, Object>> getSampleByIndentId(Object object);

	// 添加对商品的评价
	int insertGEvaluation(Evaluation evaluation);

	// 添加对商品评价的图片
	int insertGPicture(Map<String, Object> map);

	// 添加对工人的评价
	int insertWEvaluation(Map<String, Object> map);

	// 修改工人完成订单的状态
	int updateIndent(Map<String, Object> map);

	// 修改该商品勾选状态
	void updateGoodByIsUse(Map<String, Object> map3);

	// 通过商品id获得样品的单价
	Map<String, Object> getSamplePriceAndCountOfFinAccByGoodId(Integer goodsId);

	// 修改订单的价钱
	void updatePriceOfOrders(Map<String, Object> map);

	//
	void updateOrderByCoupons(Map<String, Object> map);

	// 配件id得到配件的详细信息
	List<Map<String, Object>> getAccDeatailByGoodsId(Integer goodsId);

	// 删除顾客地址
	int deleteAddress(@Param("cuAdId") Integer cuAdId, @Param("customerId") Integer customerId);


	// 修改默认
	int updateStatus();

	// 待安装中点击确认安装
	int installComplete(Map<String, Object> map);

	// 修改优惠券状态
	int updateIsUse(Integer couponsId);

	// 修改顾客地址
	int chageAddress(Customer_address customer_address);
	
	//查询待付款角标
	Integer selectPayingB(Integer customerId);

	// 进行中角标
	Integer ongoingJiaoB(Integer customerId);

	// 已付款角标
	Integer YesPayment(Integer customerId);

	// 待安装角标
	Integer stayInstall(Integer customerId);

	// 已取消其中一半角标
	Integer cancelJiaoB(Integer customerId);
	
	//已完成角标
	Integer completeJiaoB(Integer customerId);

	// 已取消中另一半角标
	Integer halfCancelJiaoB(Integer customerId);

	// 得到默认地址
	Map<String, Object> selectDefault(Integer customerId);

	// 查询每个商品绑定的配件数
	List<Map<String, Object>> selectWhatStructure(Integer goodsId);

	// 添加顾客售后问题
	int insertAfterSales(Goods_afterSales goods_afterSales);

	// 修改商品售后为顾客已提交问题
	int updateApplyAfter(Integer goodsId);

	// 添加售后流程事件处理
	int insertAfterFlow(Map<String, Object> map);

	// 提交顾客售后问题图片
	int insertAfterImg(Map<String, Object> map);

	// 查询商品的售后流程
	List<Map<String, Object>> selectAfterFlow(Integer goodsId);

	// 根据事件ID查询事件
	String selectDispose(Integer disposeId);

	// 搜索配件
	List<Sample> selectPeijian(Map<String, Object> map);

	// 根据sampleId查询配件类型
	Integer selectLeixing(Integer sampleId);

	// 插入与商品绑定的配件
	int insertPeijian(Map<String, Object> map);

	// 修改配件米数数量
	int updatePeijian(Map<String, Object> map);

	// 添加问题
	int insertProblem(Problem problem);

	// 添加问题图片
	int insertWenti(Map<String, Object> map);

	// 用户应支付的定金
	Double selectDeposit(String city);

	// 查询工人信息
	Map<String, Object> selectWorkerX(Integer indentId);

	// 查询订单状态
	Indent  selectIndentInfo(Integer indentId);

	// 查询经纬度
	Map<String, Object> selectJingwei(Integer indentId);

	// 根据顾客id查询默认地址
	Integer selectCuAdId(Integer customerId);

	// 根据订单号删除其绑定的商品
	int deleteGoodsIndent(Integer indentId);

	// 根据订单号删除订单
	int deleteIndent(Integer indentId);

	// 根据订单号查询订单中有多少个不一样的安装房间
	Integer selectDistinct(Integer indentId);

	// 根据订单号查询其他安装房间有多少个不一样的其他房间
	Integer selectOtherRoom(Integer indentId);

	// 插入测量房间个数
	int updateIndentRoom(Map<String, Object> map);

	// 查找唯一用户
	Customer getCustomerById(Integer customerId);

	Integer insertCustomerByPhone(Map<String, Object> map);

	// 根据某些配件类型查询配件
	List<Sample> selectNPeijian(Map<String, Object> map);

	// 根据产品号查询type
	Integer selectPType(Integer sampleId);

	// 根据产品号查询配件价格
	Double selectPPrice(Integer sampleId);

	// 查询魔术轨的价格
	Double selectMoshugui();

	// 查询顾客钱包
	Double selectWallet(Integer customerId);

	// 查询绑定情况
	Integer selectBangding(Integer customerId);

	Integer selectWeixin(Integer customerId);

	Integer selectZhifubao(Integer customerId);

	// 查询提现情况
	List<MoneyRecord> selectTixian(Integer customerId);

	// 在顾客信息中添加银行卡
	int updateBank(Map<String, Object> map);

	// 添加支付宝
	int updateZhifubao(Map<String, Object> map);

	// 根据商品id查询商品价钱
	Double selectGoodsPrice(Integer goodsId);

	// 根据商品号修改属性中的订单号
	int updateGOrderId(Map<String, Object> map);

	// 根据订单号查询订单信息
	Map<String, Object> selectOrderX(Integer orderId);

	// 添加微信
	int updateWeixin(Map<String, Object> map);

	// 订单取消修改商品中绑定的订单号
	int updateGoodsO(Integer orderId);

	// 订单取消删除订单
	int deleteQOrder(Integer orderId);

	// 根据订单号验证订单是否存在
	Integer selectYanzheng(Integer orderId);

	// 根据市查询测量计算所需字段
	Map<String, Object> selectCLiang(String city);
	
	// 根据市名称查询相关费用
	Map<String, Object> selectCPriceByCity(@Param("city")String city,@Param("type")Integer type);

	// 根据市查询安装计算所需字段
	Map<String, Object> selectAzhuang(String city);

	// 根据商品号查询配件号
	List<Integer> selectAZpeijian(Integer goodsId);

	// 根据配件商品号查询一些属性
	Map<String, Object> selectAccnumber(Integer goodsId);

	// 根据订单号查询物流号
	List<String> selectWuliuhao(Integer orderId);

	// 根据物流号订单号查询图
	List<String> selectImgs(Map<String, Object> send);

	// 查询app启动广告
	List<String> selectGuanggao();

	// 修改商品为不是购物车商品
	void updateGoodsCar(Integer goodsId);

	// 查找唯一用户
	Customer getOneById(Integer customerId);

	// 更新用户的钱包
	int updateCustomerWallet(Map<String, Object> param);

	// 存特殊
	int insertSpecial(Goods_special special);

	// 存特殊
	int updateSpecial(Map<String, Object> map);

	// 查找配件信息
	Map<String, Object> selectAccessoriesTypeById(Integer accessoriesTypeId);

	// 查询商品的特殊布
	List<Goods_special> selectSpecial(int goodsId);

	List<Indent> getDiffrStatusIndents(Map<String, Object> inParames);
	
	List<Indent> getPayedIndents(int customerId);
   
	Indent selectIndent(Indent inparame);

	double selectIndentPrice(Integer indentId);

	Map<String, Double> selectRules(Integer indentId);

	Map<String, Object> selectIndentMap(Integer indentId);

	List<Map<String, Object>> selectStatus7(Integer customerId);

//	Integer selectWinNum(Integer indentId);  //安装房间数目--全配件

	//查询所在城市安装行情
	Cost_rules  selectAPriceByCity(Map<String, Object> paras);
	
	//修改订单
	void updateMeterIndent(Indent indent1);
	
	//已完成订单
	List<Indent> getCompletedIndents(Map<String, Object> inParames);

	List<Map<String, Object>> getParsGoods(Integer id);

	//查询商品风格
	List<Map<String, Object>> selectStyles();
	
	//查询商品适应场景
	List<Map<String, Object>> selectLocations();
		
	//成品帘类型
	List<Map<String, Object>> selectFinishproducttypes();	
	
	//配件帘类型
	List<Map<String, Object>> selectAccessoriestypes();
	
	//查询字典表商品添加其他参数
	List<Map<String, Object>> selectDictionary(Map<String,Object> map);
	
	
	//查询字典表细分参数数据
	List<Map<String, Object>> selectDictionarybyParam(Map<String,Object> map);
	//字典表新属性的添加
	int dic_insert(Dictionary dictionary);
	
	/**
	 * 通过订单号获取其下的商品信息，商品信息要满足价格计算对数据的需求
	 * @param map 商品号,顾客id
	 * @return
	 */
	Goods getGoodsToCaclPriceByGoodsId(Map<String, Object> map);
	
	Map<String, Object> getGoodsToCaclCurtainPriceByGoodsId(Integer goodsId);

	//查询布艺帘成品帘accessTypeId
	List<Map<String, Object>> getAccessTypeContentOfGoods(Integer goodsId);
	
	// 修改顾客钱包
	int updateWalletComple(Map<String, Object> map);
	
	//查询顾客钱包明细，交易记录
	List<Map<String, Object>> selectMingxi(Map<String, Object> map);
	
	//查询顾客钱包明细，交易记录
	int updateUserInfo(Map<String, Object> map);

	void updateSpecialToNewGoods(Map<String, Integer> sparas);

	/**
	 * 根据goodsId查询该商品下的说有商品配件的special
	 * @param goodsId 商品id
	 * @return Goods_special实体类集合
	 */
	List<Goods_special> selectGoodsSpecialByGoodsId(Goods_special special);
	
	/**
	 * @param goodsId
	 * @return
	 */
	Goods selectGoodsByGoodsId(Integer goodsId);

	//查询一些优惠信息
	Territory_joint selectTerritoryByType(Integer type);
	
	Customer selectCustomerInfoOfDealer(String phone);

	void updateCustomer(Customer registCustomer);

	Map<String,Object> isCustomerOrdered(Integer indentId);
	
	//查询纱价格
	Double selectSprice(Integer sampleId);
	//查询帘头价格
	Double selectLprice(Integer sampleId);
	//查询同系列除封面外的其他商品
	List<Sample> selectSeries(@Param("series")Integer series);

}
